
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

#include "GLMetaseq.h"		// メタセコイアローダ
#include "egLight.h"		// 簡易光源制御


MQO_MODEL	g_mqoModel;		// MQOモデル


void Draw(void)
{
	static GLfloat rot = 0.0;

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// 初期化
	glClearColor(0.f, 0.f, 0.2f, 1.0);					// 背景色
	glMatrixMode(GL_MODELVIEW);

	glEnable(GL_DEPTH_TEST);
	glPushMatrix();

		// 光源の配置
		glPushMatrix();
			glTranslatef(0.0, 0.0, -200.0);
			egLightOn(0.9, 0.9, 0.9);		// 光源ON 引数は色
		glPopMatrix();

		// 光源の影響を受けるオブジェクト
		glPushMatrix();
			glTranslatef(0.0, 0.0, -800.0);
			glRotatef(rot, 0.0, 1.0, 0.0);	// Y軸回転
			mqoCallModel(g_mqoModel);		// MQOモデルのコール
		glPopMatrix();

		// 光源OFF
		egLightOff();
		
	glPopMatrix();
    glDisable(GL_DEPTH_TEST);

	glutSwapBuffers();

	rot += 1.0;
}


void Idle(void)
{
	Draw();
}


void Reshape (int w, int h)
{
	double	znear = 10;
	double	fovy = 50;
	double	zfar = 10000;

	// ビューポート設定
	glViewport(0, 0, w, h);

	// 射影設定
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(fovy, (double)w/h, znear, zfar);
}


int main(int argc, char *argv[])
{

	glutInit(&argc,argv);										// OpenGL初期化
	glutInitWindowPosition(100, 50);							// ウィンドウの表示位置
	glutInitWindowSize(320, 240);								// ウィンドウのサイズ
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);	// ディスプレイ設定
	glutCreateWindow("MQO Loader for OpenGL");					// ウィンドウの生成

	// MQOモデルのロード
	g_mqoModel = mqoCreateModel("sachi2/sachi2.mqo",1.0);

	glutDisplayFunc(Draw);		// 描画処理を行うコールバック関数の設定
	glutIdleFunc(Idle);			// アイドル時のコールバック関数の設定
	glutReshapeFunc(Reshape);	// ウィンドウ変形時のコールバック関数の設定

	glutMainLoop();	// イベント待ちの無限ループに入る

	return 0;
}

